Saltar al contenido principal

4.2 Diccionarios (dict)

1️⃣ ¿Qué es un diccionario?​

Un diccionario en Python es una estructura de datos que permite almacenar pares de elementos: una clave (key) y un valor (value). Cada clave se asocia a un valor, y esta relación se denomina par clave–valor.

Los diccionarios son colecciones no ordenadas (hasta Python 3.6 lo eran, a partir de 3.7 conservan el orden de inserción) y mutables, lo que significa que pueden modificarse tras su creación.

Ejemplo básico
alumno = {"nombre": "Ana", "edad": 20, "curso": "Python"}
print(alumno)

# {'nombre': 'Ana', 'edad': 20, 'curso': 'Python'}
en este ejemplo

Cada par tiene una clave (por ejemplo "nombre") y un valor asociado ("Ana"). A diferencia de una lista, los elementos no se acceden por índice, sino por su clave.


2️⃣ Características principales de los diccionarios​

PropiedadDescripción
EstructuraColección de pares clave–valor.
Claves únicasNo puede haber claves repetidas.
MutableSe pueden añadir, modificar o eliminar elementos.
DesordenadoNo tiene índices numéricos, se accede por clave.
Claves inmutablesLas claves deben ser de tipo inmutable (cadena, número, tupla, frozenset…).

3️⃣ Cómo crear un diccionario​

🟩 Sintaxis con llaves {}​

La forma más común es definir los pares entre llaves {}, separados por comas y usando dos puntos : entre clave y valor.

Creación de diccionario mediante {}
persona = {"nombre": "Luis", "edad": 25, "ciudad": "Madrid"}

🟦 Con la función dict()​

También se puede usar la función dict() indicando los pares como argumentos con nombre o pasando una lista de tuplas.

Creación de diccionario mediante casting
# Con argumentos nombrados
datos = dict(nombre="Ana", edad=22, curso="Python")

# Con lista de tuplas
pares = dict([("nombre", "Ana"), ("edad", 22)])

🟨 Diccionario vacío​

Creación de un diccionario vacío
vacio = {}
# o bien
vacio = dict()

4️⃣ Acceso y modificación de elementos​

🟩 Acceder a un valor​

Se accede al valor de una clave escribiendo su nombre entre corchetes [].

Acceder un valor mediante [clave]
alumno = {"nombre": "Ana", "edad": 20, "curso": "Python"}
print(alumno["nombre"])

# Ana
en este ejemplo

La expresión alumno["nombre"] devuelve el valor asociado a la clave "nombre".

aviso

Si la clave no existe, Python genera un error KeyError.

🟦 Acceso seguro con get()​

Para evitar errores cuando una clave podría no existir, se utiliza el método get().

Acceso seguro con get(clave, argumento)
print(alumno.get("nota", "No disponible"))

# No disponible
en este ejemplo

Si "nota" no está en el diccionario, get() devuelve el segundo argumento (por defecto, None).

🟨 Añadir o modificar elementos​

Si se asigna un valor a una clave existente, se actualiza. Si la clave no existía, se añade.

Actualizar valores
alumno["nota"] = 9.5
alumno["curso"] = "Avanzado"
print(alumno)

# {'nombre': 'Ana', 'edad': 20, 'curso': 'Avanzado', 'nota': 9.5}

🟧 Eliminar elementos​

MétodoDescripciónEjemplo
pop(clave)Elimina una clave y devuelve su valor.alumno.pop("edad")
del dicc[clave]Elimina la clave directamente.del alumno["curso"]
clear()Vacía el diccionario.alumno.clear()
Eliminando elementos
alumno = {"nombre": "Ana", "edad": 20, "curso": "Python"}
edad = alumno.pop("edad")
print(edad)
print(alumno)

# 20
# {'nombre': 'Ana', 'curso': 'Python'}

5️⃣ Recorrido de diccionarios​

Los diccionarios pueden recorrerse fácilmente con bucles for.

🟩 Recorrer solo las claves​

for clave in alumno:
print(clave)

🟦 Recorrer claves y valores con items()​

for clave, valor in alumno.items():
print(clave, "→", valor)

# nombre → Ana
# curso → Python

🟨 Solo valores con values()​

for valor in alumno.values():
print(valor)

6️⃣ Métodos principales de los diccionarios​

MétodoDescripciónEjemploResultado
keys()Devuelve una vista con las claves.alumno.keys()dict_keys(['nombre','curso'])
values()Devuelve los valores.alumno.values()dict_values(['Ana','Python'])
items()Devuelve pares (clave, valor).alumno.items()dict_items([('nombre','Ana'), ('curso','Python')])
get(clave[, defecto])Devuelve el valor o defecto.alumno.get("nota", 0)0
pop(clave)Elimina y devuelve un valor.alumno.pop("curso")'Python'
popitem() Elimina y devuelve una tupla con el último para clave-valor.alumno.popitem()('curso', 'Python')
update(otro_dicc)Fusiona o actualiza con otro diccionario.alumno.update({"edad": 21})Actualiza edad.
clear()Vacía el diccionario.alumno.clear(){}
copy()Devuelve una copia superficial.nuevo = alumno.copy()Nueva copia.
deepcopy()Devuelve una copia profunda.copia_total = copy.deepcopy(alumno)Copia totalmente independiente de la original.

7️⃣ Comprobación de existencia de una clave​

Se puede verificar si una clave existe usando el operador in.

Comprobando la existencia de la clave
if "nombre" in alumno:
print("La clave 'nombre' existe")

8️⃣ Diccionarios anidados​

Un diccionario puede contener otros diccionarios como valores, lo que permite representar estructuras complejas, como bases de datos pequeñas.

Diccionario de diccionarios
alumnos = {
"A01": {"nombre": "Ana", "nota": 9},
"A02": {"nombre": "Luis", "nota": 7}
}
print(alumnos["A01"]["nombre"]) # Ana
en este ejemplo

alumnos["A01"] devuelve otro diccionario, y al acceder con ["nombre"] se obtiene el valor interno.


9️⃣ Crear diccionarios por comprensión​

Al igual que las listas, los diccionarios también pueden generarse mediante comprensiones.

Creación de diccionario mediante compresión
cuadrados = {n: n**2 for n in range(1, 6)}
print(cuadrados)

# {1: 1, 2: 4, 3: 9, 4: 16, 5: 25}
en este ejemplo

Por cada número n del rango, se crea una pareja donde la clave es el número y el valor es su cuadrado.

También pueden incluir condiciones:

pares = {n: n**2 for n in range(1, 10) if n % 2 == 0}

📊 Tabla resumen​

CaracterísticaDescripción
EstructuraColección de pares clave: valor
AccesoPor clave, no por índice
Mutabilidad✅ Mutable
Duplicados❌ Claves únicas
Orden✅ Conserva el orden de inserción (desde Python 3.7)
Claves válidasTipos inmutables (str, int, tuple, frozenset)
Métodos más comuneskeys(), values(), items(), get(), update(), pop(), clear()
Comprensión{clave: valor for ...}